/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package db_interaction;

import javax.persistence.Entity;
import javax.persistence.Table;
import java.io.Serializable;
import java.util.List;
import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
import org.hibernate.Query;
import org.hibernate.Session;

/**
 *
 * @author Neves
 */
@Entity
@Table(name = "fotos")
public class Fotos implements Serializable {
    
    @Id
    @GeneratedValue
    private int Fotos_id;
    @Basic
    @Column(name = "Fotos_Utilizador_id")
    private int Fotos_Utilizador_id;
    @Basic
    @Column(name = "Fotos_foto")
    private String Fotos_foto;
    @Basic
    @Column(name = "Fotos_perfil")
    private boolean Fotos_perfil;
    @Basic
    @Column(name = "Fotos_activo")
    private boolean Fotos_activo;

    //GETS
    public int GETFotos_id() {
        return this.Fotos_id;
    }
    
    public int GETFotos_Utilizador_id() {
        return this.Fotos_Utilizador_id;
    }
    
    public String GETFotos_foto() {
        return this.Fotos_foto;
    }
    
    public boolean GETFotos_perfil() {
        return this.Fotos_perfil;
    }
    
    public boolean GETFotos_activo() {
        return this.Fotos_activo;
    }

    //SETS
    public void SETFotos_id(int Fotos_id) {
        this.Fotos_id = Fotos_id;
    }
    
    public void SETFotos_Utilizador_id(int Fotos_Utilizador_id) {
        this.Fotos_Utilizador_id = Fotos_Utilizador_id;
    }
    
    public void SETFotos_foto(String Fotos_foto) {
        this.Fotos_foto = Fotos_foto;
    }
    
    public void SETFotos_perfil(boolean Fotos_perfil) {
        this.Fotos_perfil = Fotos_perfil;
    }
    
    public void SETFotos_activo(boolean Fotos_activo) {
        this.Fotos_activo = Fotos_activo;
    }

    //DB access
    public Boolean InsertFoto(String email_user_login, String caminho_foto_db) {
        
        List<Utilizador> user = null;
        int id_user;
        Fotos f = new Fotos();
        try {
            Session s = NewHibernateUtil.getSessionFactory();
            
            s.beginTransaction();
            Query q = s.createQuery("from Utilizador where Utilizador_email like'%" + email_user_login + "%'");
            user = q.list();
            s.getTransaction().commit();
            
            id_user = user.get(0).getid();
            
            s.beginTransaction();
            
            f.SETFotos_Utilizador_id(id_user);
            f.SETFotos_foto(caminho_foto_db);

            // ALTERAR AQUIIIIIIIIIIIIIIIIIIII
            f.SETFotos_perfil(false);
            f.SETFotos_activo(true);
            
            s.save(f);
            
            s.getTransaction().commit();
            
            return true;
        } catch (Exception e) {
            return false;
        }
    }
    
    public String SelectFoto(String email_user_login) {
        
        List<Utilizador> user = null;
        List<Fotos> foto = null;
        int id_user;
        Fotos f = new Fotos();
        try {
            Session s = NewHibernateUtil.getSessionFactory();
            
            s.beginTransaction();
            Query q = s.createQuery("from Utilizador where Utilizador_email like'%" + email_user_login + "%'");
            user = q.list();
            s.getTransaction().commit();
            
            id_user = user.get(0).getid();
            
            s.beginTransaction();
            Query q2 = s.createQuery("from Fotos where Fotos_Utilizador_id = " + id_user);
            foto = q2.list();
            s.getTransaction().commit();
            
            return foto.get(0).GETFotos_foto();
            
        } catch (Exception e) {
            return null;
        }
    }
    
    public List<Fotos> SelectFotosUser(int id_user) {
        
        List<Fotos> fotos = null;
        
        Fotos f = new Fotos();
        try {
            Session s = NewHibernateUtil.getSessionFactory();
            
            s.beginTransaction();
            Query q2 = s.createQuery("from Fotos where Fotos_Utilizador_id = " + id_user);
            fotos = q2.list();
            s.getTransaction().commit();
            
            return fotos;
            
        } catch (Exception e) {
            return null;
        }
    }
    
    public Fotos SelectFotoUser(int id_user) {
        
        List<Fotos> fotos = null;
        
        Fotos f = new Fotos();
        try {
            Session s = NewHibernateUtil.getSessionFactory();
            
            s.beginTransaction();
            Query q2 = s.createQuery("from Fotos where Fotos_Utilizador_id = " + id_user);
            fotos = q2.list();
            s.getTransaction().commit();
            
            return fotos.get(0);
            
        } catch (Exception e) {
            return null;
        }
    }
    
    public Fotos SelectEntity(Fotos foto) {
        Fotos fot = null;

        //returns sellected friend if successfull
        //return null
        try {
            Session s = NewHibernateUtil.getSessionFactory();
            fot = (Fotos) s.load(Fotos.class, foto.GETFotos_id());
            s.getTransaction().commit();
            return fot;
            
        } catch (Exception e) {
            return fot;
        }
    }
    
    public int UpdateEntity(Fotos fot) {
        //returns 1 if successfull
        //return -1 if error
        try {
            Session s = NewHibernateUtil.getSessionFactory();
            s.save(fot);
            s.getTransaction().commit();
            return 1;
            
        } catch (Exception e) {
            return -1;
        }
    }
}
